前面有提到,當我們起一個Process起來,不論是透過滑鼠左鍵連點、先框起來再按Enter、或者是比較高級的用command line去執行,是把存在硬碟裡的Program載入到硬碟中,這個時候的狀態叫作-New。在這個時候,以CPU的角度來看,Process也已經不是Process,而只是一堆Instructions。
如果有興趣的話可以在command line下指令來看看自己電腦當前的作業系統到底跑了那些process
tasklist
ps -el
在載入的這個過程中,作業系統會在跟記憶體要一塊空間來存Process所需要的資訊,那其中跟我這種開發者很相關的就是在程式裡面變數放的地方,會被存放在三個區塊:
而Process New完之後還有幾個不同的階段
關於動態記憶體配置這一塊我自己有個很慘痛的經驗,過去曾寫過一套演算法,其過程是經由不斷的疊代後才能求出解,但在疊代的過程只配置記憶體,卻沒有釋放掉,於是就產生memory leadk
的現象,程式把記憶體用的越來越滿,跑幾個小時之後,最後作業系統的保護機制直接送我一個大大的killed
。所以說程式被殺就被殺了,還是要學好作業系統嘛,才能知道自己的程式是怎麼樣死的阿。